package com.dms.modules.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.product.entity.ProductComment;
import com.dms.modules.product.vo.CommentVO;
import com.dms.modules.product.vo.CommentStatisticsVO;

import java.util.List;

/**
 * 商品评论服务接口
 */
public interface ProductCommentService extends IService<ProductComment> {
    
    /**
     * 添加商品评论
     * @param userId 用户ID
     * @param orderId 订单ID
     * @param productId 商品ID
     * @param content 评论内容
     * @param rating 评分
     * @param images 图片列表
     * @param isAnonymous 是否匿名
     * @return 评论ID
     */
    Long addComment(Long userId, Long orderId, Long productId, String content, 
                   Integer rating, List<String> images, Boolean isAnonymous);
    
    /**
     * 回复评论
     * @param commentId 评论ID
     * @param reply 回复内容
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean replyComment(Long commentId, String reply, Long userId);
    
    /**
     * 删除评论
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteComment(Long commentId, Long userId);
    
    /**
     * 获取商品评论列表
     * @param productId 商品ID
     * @param page 分页参数
     * @return 评论列表
     */
    IPage<CommentVO> getProductComments(Long productId, Page<CommentVO> page);
    
    /**
     * 获取用户评论列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 评论列表
     */
    IPage<CommentVO> getUserComments(Long userId, Page<CommentVO> page);
    
    /**
     * 获取评论详情
     * @param commentId 评论ID
     * @return 评论详情
     */
    CommentVO getCommentDetail(Long commentId);
    
    /**
     * 点赞/取消点赞
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean toggleLike(Long commentId, Long userId);
    
    /**
     * 审核评论
     * @param commentId 评论ID
     * @param status 状态
     * @param remark 备注
     * @return 是否成功
     */
    boolean auditComment(Long commentId, Integer status, String remark);
    
    /**
     * 获取评论统计
     * @param productId 商品ID
     * @return 评论统计
     */
    CommentStatisticsVO getCommentStatistics(Long productId);

    /**
     * 检查商品是否已评价
     * @param orderId 订单ID
     * @param productId 商品ID
     * @return 评价数量
     */
    int checkHasReviewed(Long orderId, Long productId);
} 